#ifndef AVALON_ACCOUNT_HPP
#define AVALON_ACCOUNT_HPP
#include <string>
#include "Avalon/Base/Mask.hpp"
#include "Avalon/ServiceLocator/DirectoryEntry.hpp"

namespace Avalon {
namespace ServiceLocator {

  /*! \class Account
   *  \brief Represents an ServiceLocatorClient account.
   *  \author Kamal Mansouri <kranar@hotmail.com>
   */
  class Account : public DirectoryEntry {
    public:

      //! Constructs an Account.
      /*!
        \param tag The Tag identifying the Account.
      */
      Account(const Tag& tag);

      virtual ~Account();

      virtual Type GetType();

      virtual Tag GetTag();

    protected:
      virtual void Shuttle(Serialization::DataShuttle* shuttle,
        unsigned int version);

    private:
      friend class Serialization::DataShuttle;
      Tag m_tag;

      Account();
  };
}
}

#endif // AVALON_ACCOUNT_HPP
